package com.mbc.controller;

import com.mbc.comment.Result;
import com.mbc.utils.AliOssUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import net.coobird.thumbnailator.Thumbnails;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

/**
 * 上传文件控制器
 *
 * @author suimeng
 * @date 2024/04/17
 */
@RequestMapping("/upload")
@RestController
@Api(tags = "所有图片上传接口")
@Slf4j
@CrossOrigin
public class UploadFileController {

    @Autowired
    private AliOssUtil aliOssUtil;

    @PostMapping("/file")
    @ApiOperation("文件上传")
    public Result<List<String>> uploadFile(MultipartFile[] files) {
        // 创建用于存储成功上传的文件名的列表
        List<String> uploadedFiles = new ArrayList<>();

        for (MultipartFile file : files) {
            try {
                //原始文件名
                ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
                Thumbnails.of(file.getInputStream()).size(800, 600).outputFormat("jpg").toOutputStream(outputStream);
                byte[] processedImageData = outputStream.toByteArray(); // 获取处理后的图片数据
                String originalFilename = file.getOriginalFilename();
                //String extension = originalFilename.substring(originalFilename.lastIndexOf("."));
                String objectName = UUID.randomUUID().toString() + ".jpg";

                // 使用处理后的图片数据上传
                String fileName = aliOssUtil.upload(processedImageData, objectName);
                uploadedFiles.add(fileName); // 将成功上传的文件名添加到列表中

            } catch (IOException e) {
                log.error("文件上传失败:{}", e);
                // 这里你可以决定是否要在遇到错误时继续尝试上传下一个文件，或者直接返回错误
                // 如果你选择继续，那么不需要做任何操作在这里
                // 如果你希望直接返回错误，你可以在这里返回 Result.failure("上传失败")
            }
        }

        if (uploadedFiles.isEmpty()) {
            // 如果一个文件也没上传成功，返回失败结果
            return Result.error("所有文件上传失败");
        } else {
            // 否则，返回成功上传的文件名列表
            return Result.success(uploadedFiles);
        }
    }
}
